#include <stdio.h>


void printf_bit(int n)
{
    // 设定一个掩码 从最高位开始
    unsigned int make = 1 << (sizeof(int) * 8 - 1);
    // 1000 0000 0000 0000 0000 0000 0000 0000

    // 循环遍历每一个位置
    for (int i = 0; i < sizeof(int) * 8; i++)
    {
        // 输出当前位
        if (n & make)
        {
            putchar('1');
        }
        else
        {
            putchar('0');
        }
        // 移动掩码
        make >>= 1;

        if((i + 1) % 4 == 0)
        {
            putchar(' ');
        }
    }
    putchar('\n');
}



int main(int argc, char const *argv[])
{
    int GPIO_MODE = 0xFFFFFFCC;
    printf_bit(GPIO_MODE);
    // 特定位设置  将 第 32 和 31 设置为 01
    
    // 对特定位置设定的方法 第 32 和 31 设置为 01
    // 1、清空两个位置
    GPIO_MODE &= ~(3 << 30);
    printf_bit(GPIO_MODE);
    // 2、设置 31 为 1
    GPIO_MODE |= 1 << 30;
    printf_bit(GPIO_MODE);

    return 0;
}
/*
位掩码



特定位置清除
A:0000 1010
B:0100 0000
A & ~B


特定位置修改
A:0000 1010
B:0100 0000
A | B
0000 1010
0100 0000
0100 1010
特定位置翻转
A:0000 1010
B:0000 1000
A ^ B
0000 1010
0000 1000
0000 0010
*/


